/*
 * @lc app=leetcode.cn id=543 lang=golang
 *
 * [543] 二叉树的直径
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func diameterOfBinaryTree(root *TreeNode) int {
	m := 0
	var helper func(root *TreeNode) int
	//返回树的高度 本身是一个dfs操作，会遍历树种所有节点，我们可以在遍历到各节点时，比较记录最大直径
	helper = func(root *TreeNode) int {
		if root == nil {
			return -1
		}
		left := helper(root.Left) + 1 //
		right := helper(root.Right) + 1

		m = max(m, left+right)

		return max(left, right)
	}
	helper(root)
	return m
}

func max(a, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

// @lc code=end

